package football_behaviour

import (
	"encoding/json"
	"longmen/server/internal/services/nami/services/sports/football"
	"longmen/server/pkg/db/mysql/models/models_sports"
)

type (
	CompetitionApiResponse struct {
		Code  int `json:"code"`
		Query struct {
			Total   int    `json:"total"`    // 返回数据总量
			Type    string `json:"type"`     // 查询类型，id查询：sequence、time查询：timehelper，默认sequence
			ID      int    `json:"id"`       // 查询id值，默认为0（id查询，字段返回）
			MinID   int    `json:"min_id"`   // 返回数据最小id（id查询，字段返回）
			MaxID   int    `json:"max_id"`   // 返回数据最大id（id查询，字段返回）
			Limit   int    `json:"limit"`    // 可返回数据最大数（id查询，字段返回）
			Time    int    `json:"time"`     // 查询time值（time查询，字段返回）
			MinTime int    `json:"min_time"` // 回数据最小time(更新时间戳)（time查询，字段返回）
			MaxTime int    `json:"max_time"` // 返回数据最大time(更新时间戳)（time查询，字段返回）
		} `json:"query"`
		Results []Competition `json:"results"` // 结果集合
	}
	TitleHolder []int
	OtherTitle  []interface{}
	Competition struct {
		ID           int    `json:"id"`             // 赛事id
		CategoryID   int    `json:"category_id"`    // 分类id
		CountryID    int    `json:"country_id"`     // 国家id
		NameZh       string `json:"name_zh"`        // 中文名称
		NameZht      string `json:"name_zht"`       // 粤语名称
		NameEn       string `json:"name_en"`        // 英文名称
		ShortNameZh  string `json:"short_name_zh"`  // 中文简称
		ShortNameZht string `json:"short_name_zht"` // 粤语简称
		ShortNameEn  string `json:"short_name_en"`  // 英文简称
		Logo         string `json:"logo"`           // 赛事logo
		Type         int    `json:"type"`           // 赛事类型，0-未知、1-联赛、2-杯赛、3-友谊赛
		// example：[10181, 6]
		//	Enum:
		//		Array[2]
		//			0:"球队id - int"
		//			1:"赛事冠军次数 - int"
		TitleHolder TitleHolder `json:"title_holder"` // 卫冕冠军 字段说明（为空不存在）
		// example：[[10135], 20]
		// Enum:
		//		Array[2]
		//			0: Array[1] 多个球队ID
		//				0:"球队id - int"
		//			1:"赛事冠军次数 - int"
		MostTitles OtherTitle `json:"most_titles"` // 夺冠最多球队 字段说明（为空不存在）

		//example：[[10021], [10411]]
		//	Enum:
		//		Array[2]
		//			0:Array[1]
		//				0:"球队id（低级赛事升级球队列表，没有为空） - int"
		//			1:Array[1]
		//				0:"球队id（高级赛事降级球队列表，没有为空） - int"
		Newcomers OtherTitle `json:"newcomers"` // 晋级淘汰球队 字段说明（为空不存在）
		//example：[[], [83]]
		//Enum:
		//		Array[2]
		//		0:Array[1]
		//			0:"高一级赛事id，没有为空 - int"
		//		1:Array[1]
		//			0:"低一级赛事id，没有为空 - int"
		Divisions OtherTitle `json:"divisions"` // 赛事层级 字段说明（为空不存在）
		Host      struct {
			Country string `json:"country"` // 国家
			City    string `json:"city"`    // 城市，可能不存在
		} `json:"host,omitempty"` // 东道主（为空不存在）
		PrimaryColor   string `json:"primary_color"`   // 主颜色，可能不存在
		SecondaryColor string `json:"secondary_color"` // 次颜色，可能不存在
		UpdatedAt      int    `json:"updated_at"`      // 更新时间
	}
)

func (r CompetitionApiResponse) Interface() []football.InsertCompetitionInterface {
	a := make([]football.InsertCompetitionInterface, 0)
	for _, record := range r.Results {
		a = append(a, record)
	}
	return a
}

func (c Competition) Get() models_sports.FootballCompetition {
	return models_sports.FootballCompetition{
		ID:             c.ID,
		CategoryID:     c.CategoryID,
		CountryID:      c.CountryID,
		NameZh:         c.NameZh,
		NameZht:        c.NameZht,
		NameEn:         c.NameEn,
		ShortNameZh:    c.ShortNameZh,
		ShortNameZht:   c.ShortNameZht,
		ShortNameEn:    c.ShortNameEn,
		Logo:           c.Logo,
		Type:           c.Type,
		TitleHolder:    c.TitleHolder.String(),
		MostTitles:     c.MostTitles.String(),
		Newcomers:      c.Newcomers.String(),
		Divisions:      c.Divisions.String(),
		HostCountry:    c.Host.Country,
		HostCity:       c.Host.City,
		PrimaryColor:   c.PrimaryColor,
		SecondaryColor: c.SecondaryColor,
		UpdatedAt:      c.UpdatedAt,
	}
}

func (title TitleHolder) String() string {
	titleHolder, _ := json.Marshal(title)
	return string(titleHolder)
}

func (o OtherTitle) String() string {
	bytes, _ := json.Marshal(o)
	return string(bytes)
}
